"""
函数封装步骤：
1、功能代码写出来
2、def封装
3、参数化： 变化的数据定义为形参
4、返回值： 判断函数是否有数据需要给调用的人使用
   - 存在环境变量里 不需要返回值

封装的函数的优化：
1、记录日志： 方便问题定位 看到执行过程 == 但凡print看结果 或者debug看结果的地方都记录日志
2、因为有些用例可能没有在用例没有头部 参数 读取为空
 - 如果没有提取表达式 读出来的就是None  不能做反序列化。

生成用户名：长度 4-16位，生成号码对长度进行控制

因为有多个方法，而且方法还有可能需要扩展，所以封装类更好一些。

"""
from faker import Faker
from tools.handle_mysql import HandleMysql
from data.my_db import my_db

class GenData:

    def gen_unregister_phone(self):
        fk = Faker(locale='zh_CN')
        while True:
            # 第一步： 生成一个随机的手机号码
            phone_number = fk.phone_number()
            # 第二步： 调用数据库的方法 ： 查询这个号码不存在用户表里 得到数据库结果
            sql = f'select * from tz_user where user_mobile  = "{phone_number}";'
            result = HandleMysql(**my_db).query_data(sql)
            # 第三步： 做判断， 如果result是None  数据可以用的； 如果result不是None，重新生成
            if result is not None:
                continue  # 继续循环
            else:
                return phone_number

    def gen_unregister_name(self):
        fk = Faker(locale='zh_CN')
        while True:
            # 第一步： 生成一个随机的手机号码
            user_name = fk.user_name()
            # 第二步： 调用数据库的方法 ： 查询这个号码不存在用户表里 得到数据库结果
            sql = f'select * from tz_user where nick_name  = "{user_name}";'
            result = HandleMysql(**my_db).query_data(sql)
            # 第三步： 做判断， 如果result是None  数据可以用的； 如果result不是None，重新生成
            if result is not None or (len(user_name)>16 or len(user_name)<4):
                continue  # 继续循环
            else:
                return user_name

if __name__ == '__main__':
    # print(GenData().gen_unregister_phone())
    # print(GenData().gen_unregister_name())
    print('GenData().gen_unregister_phone()')
    # 如果想要执行字符串里的函数名
    print(eval('GenData().gen_unregister_phone()'))


